#include<iostream>







class Base
{
public:
    virtual void show(){};

};



class Derived:public Base
{
public:
    void show()
    {}
};







int main()
{

    //C语言是弱类型语言：强制类型转换 ： 没有类型检查机制——> 存在安全隐患


    //C++是强类型 语言： 安全的类型转换 



    //静态转换
   
    //基础数据类型
    //指针转换:不允许不同类型的指针转换    支持void*  和 其他指针
    
    //可以进行父子指针之间的转换，不进行 转换 的安全检查


    // int a =10;  
    // // double b = static_cast<double>(0);
    
    // // int* p = &a;
    // // double *b = static_cast<double*>(p);
    // void* p = &a;

    // double* b = static_cast<double*>(p);

    // std::cout<<b<<std::endl;

    // Base* b = new Base;
    // Derived* d = new Derived;

    // Derived* p = static_cast<Derived*>(b);



    //动态转换

    // 用于父子指针转换
    // 在运行时进行判断，如果不安全 ，返回空指针

    Base* b = new Base;
    Derived* d = new Derived;

    // Derived* p = dynamic_cast<Derived*>(b);  //这里是  父指针 转换成 子指针 不安全，所以返回的空指针
    


    // Base* p = dynamic_cast<Base*>(d);
    // std::cout<<p<<std::endl;


    // //const_cast  常量转换
    // //把一个const 转换成 非 const

    // const int a = 10;
    //  int *p1 = const_cast<int*>(&a);

    // *p1 = 20; // 实际上改不了 符号表里



    //reinterpret_cast
    //重解释转换 ->  强制类型转换
    // 拥有最高权限  不推荐使用
    int* a= new int(1);
    double* b = reinterpret_cast<double*>(a);
    return 0;


}